#include <cstdlib>
#include <iostream>
#include "Restaurante.h"

using namespace std;

int main(int argc, char *argv[])
{
        ConjString mesasa;
		ConjString mesasb;
		ConjString mesasc;
		ConjString mesasd;
		
		//asignacion
		DiccTrie<ConjString> asignacion;
		
		//mozos
		ConjString mozos;
		
		//recetario
		Recetario rec;
		
		//Platos
		MConj platoa;
		MConj platob;
		MConj platoc;
		MConj platod;
		MConj platoe;
		
		MConj pedido1;
		MConj pedido2;
		MConj pedido3;


	mesasa.agregar("a");
	mesasa.agregar("b");
	
	mesasb.agregar("c");
	mesasb.agregar("d");
	
	mesasc.agregar("e");
	mesasc.agregar("f");
	
	mesasd.agregar("g");
	

	
	mozos.agregar("mozoa");
	mozos.agregar("mozob");
	mozos.agregar("mozoc");
	mozos.agregar("mozod");
	

	
	asignacion.definir("mozoa", mesasa);
	asignacion.definir("mozob", mesasb);
	asignacion.definir("mozoc", mesasc);
	asignacion.definir("mozod", mesasd);
	

	
	rec.agregarIngrediente("pan");
	rec.agregarIngrediente("pana");
	rec.agregarIngrediente("panaf");
	rec.agregarIngrediente("p");
	rec.agregarIngrediente("panafap");
	rec.agregarIngrediente("panapo");
	
	

	platoa.mAgregarN("pan",10);
	platoa.mAgregarN("pana",20);
	
	platob.mAgregarN("pan",10);
	
	platoc.mAgregarN("panaf",4);
	
	platod.mAgregarN("p",4);
	
	platoe.mAgregarN("panafap",3);
	platoe.mAgregarN("panapo",6);
	platoe.mAgregarN("pan",7);
	
	rec.agregarPlato("platoo", platoa);
	rec.agregarPlato("platob",platob);
	rec.agregarPlato("platoe",platoe);
	
    
    
    Restaurante r1= Restaurante(7,mozos,asignacion,rec);
	
   	r1.comprarIngrediente("pan",41);
	r1.comprarIngrediente("pana",61);
	r1.comprarIngrediente("panaf",75);
	r1.comprarIngrediente("p",1);
	r1.comprarIngrediente("panafap",3);
	r1.comprarIngrediente("panapo",56);
 
 	pedido1.mAgregarN("platoo",5);
	pedido2.mAgregar("platoe");
	pedido3.mAgregarN("platob",3);
	
	cout << "stock de pan: " << r1.dameStock("pan") << endl;
	cout << "stock de pana: " << r1.dameStock("pana") << endl;
	cout << "stock de panaf: " << r1.dameStock("panaf") << endl;
	cout << "stock de p: " << r1.dameStock("p") << endl;
	cout << "stock de panafap: " << r1.dameStock("panafap") << endl;
	cout << "stock de panapo: " << r1.dameStock("panapo") << endl;
	
    cout << "preparacion de pedidos 1 2 y 3: " << endl;
    
    if (r1.sePuedePreparar(pedido1)) cout << "Si";
    else                             cout << "No";
    cout << endl;
    
    if (r1.sePuedePreparar(pedido2)) cout << "Si";
    else                             cout << "No";
    cout << endl;
    
    if (r1.sePuedePreparar(pedido3)) cout << "Si";
    else                             cout << "No";
    cout << endl;
    
    cout << "Cantidad de mesas de restaurant: " << r1.cantMesas() << endl;
    cout << "mesas de mozoa: " << r1.cantMesasMozo("mozoa") << endl;;
    cout << "mesas de mozob: " << r1.cantMesasMozo("mozob") << endl;
    cout << "mesas de mozoc: " << r1.cantMesasMozo("mozoc") << endl;
    cout << "mesas de mozod: " << r1.cantMesasMozo("mozod") << endl;
    
    if ( r1.mesaOcupada(1) ) {
         cout << "la mesa 1 esta ocupada" << endl;
         }
    else  {
          cout <<  "la mesa 1 no esta ocupada y la voy a ocupar" ;
          bool res = r1.ocuparMesa(1);
          if (res) 
             cout << "la ocupe bien" << endl;
          else 
               cout << "fallo";
          cout << "Ahora pago y la desocupo de nuevo";
          
          //no tiene que haber 
          IteradorMConj it = IteradorMConj( r1.pedidosPendientes(1) );
          while (it.tieneProximo()){      
                cout << "pedidos pendientes de mesa1: " << it.proximo() << endl;
          }
          
          r1.pagar(1);
          
          if (!r1.mesaOcupada(1)) 
             cout << "Libere la mesa correctamente" << endl;
          else
              cout << "fallo" << endl;
          }

          
system("PAUSE");
}
